﻿#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

/*dd作为体操队队长，在给队员们排队形，体操队形为一个单独的纵列，体操队
有n个同学，标号为1∼n，对于i(1≤i≤n)号队员，会有一个诉求(1≤a[i]≤n)，表
示他想排在a[i]号队员前面，当a[i]=i时，我们认为他没有位置需求，随便排哪儿
都行，dd想知道有多少种队形方案，可以满足所有队员的要求。1*/
//3  
//1 1 2
int main() {
    int n;
    cin >> n;
    vector<int> a(n + 1);
    vector<int> it;//存储下标
    vector<int> vis(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        it.push_back(i);
    }

    int ans = 0;
    do {
        int falg = 1;
        for (auto i : it) {
            if (vis[a[i]]) {//查看a[i]号同学是否已经出现
                falg = 0;
                break;
            }
            vis[i] = 1;//如果没有则i号同学能排到a[i]号同学前，标记i号同学已经出现
        }
        if (falg) ans++;//可行方案+1
        for (int i = 1; i <= n; i++) vis[i] = 0;//清空标记
    } while (next_permutation(it.begin(), it.end()));//进行全排列
    cout << ans << endl;
    return 0;
}